Amazon S3 Tables の Table Bucketを削除する方法 #AWSreInvent

Amazon S3 Tables の Table Bucketを削除する方法 #AWSreInvent

Clock Icon2024.12.23

AWS事業本部コンサルティング部の石川です。Amazon S3 Tables の 作成済み Table Bucket を削除する際に色々ハマったのでそれを紹介します。S3 Tables サービスクオータはリージョンごとに10(デフォルト)と思ったよりも小さいので、きっと役に立つだろうと思います。

Table Bucketの階層と削除する順番

執筆時点(2024/12/23)は、マネジメントコンソールから Table Bucketを作成できますが、削除はできません。そのため、Table Bucketを削除するには、awsコマンド(AWSCLI)を使う必要があります。

Table Bucketは、Table Bucket、Namespace、Tableの順に階層構造になっています。そのため、Tableをすべて削除した後、Namespace削除して、Table Bucket削除します。今日現在では強制削除(--force)オプションはありません。

table_bukets
  ├── namespace1
  │   ├── table1
  │   └── table2
  └── namespace2

無理やり削除しようとすると、以下のようにエラーになります。

$ aws s3tables delete-namespace  --region us-east-1 --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241218 --namespace cm_namespace

An error occurred (NotFoundException) when calling the DeleteNamespace operation: The specified namespace does not exist.

Table Bucketを削除する方法

以下の階層のTable Bucketを例に削除します。

cm-namespace-20241218
  └── cm_namespace
      └── lineorder

なお、マネジメントコンソールからはこのように見えます。

amazon-s3-tables-remove-table-bucket-reinvent-1

Tableの削除

最初にテーブルをすべて削除します。

$ aws s3tables delete-table \
> --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241218 \
> --namespace cm_namespace \
> --name lineorder

Namespaceの削除

テーブルがすべて削除されたら、Namespaceを削除します。

$ aws s3tables delete-namespace \
> --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241218 \
> --namespace cm_namespace

Table Bucketの削除

最後にTable Bucketを削除します。

$ aws s3tables delete-table-bucket \
> --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241218

上記の手順でうまく削除できた方は、以降は読まなくて構いません。ブログ終了です!

私がハマったケース

マネジメントコンソールは複数のNamespaceは表示されない仕様(?)と知らずに以下のような階層だと思っていました。

cm-namespace-20241218
  └── cm_namespace
      └── lineorder

実際には、以下のようにNamespaceが複数ありました。

cm-namespace-20241218
  ├── cm_namespace
  │   └── lineorder
  └── test_namespace

最終的にマネジメントコンソールからはNamespaceがないように表示されますが以下のような状態でした。

cm-namespace-20241218
  └── test_namespace

Namespaceの一覧を取得することで、削除していないtest_namespaceを知ることができて、最終的にTable Bucket削除できました。

$ aws s3tables list-namespaces --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241218
{
    "namespaces": [
        {
            "namespace": [
                "test_namespace"
            ],
            "createdAt": "2024-12-19T11:50:08.080299+00:00",
            "createdBy": "123456789012",
            "ownerAccountId": "123456789012"
        }
    ]
}

やはり困っている人は、居たようです。

https://repost.aws/questions/QU6nCAhhv3RT2uIdb-G_HnVA/issue-deleting-an-s3table-bucket

最後に

Amazon S3 Tables の Table Bucket を削除する際には、階層構造を理解し、適切な順序で削除作業を行うことが重要です。マネジメントコンソールの表示には限界があるため、AWS CLI を使用して正確な情報を取得することが不可欠です。

特に、複数の Namespace が存在する可能性を考慮し、list-namespaces コマンドを活用して、すべての Namespace を確認することが推奨されます。この方法により、見落としがちな Namespace を発見し、完全な削除プロセスを実行できます。また、S3 Tables のサービスクオータが比較的小さいことを考えると、不要な Table Bucket を適切に管理し削除することは、リソースの効率的な利用につながります。最後に、AWS のサービスを使用する際は、マネジメントコンソールの表示だけでなく、CLI や API を併用して、より詳細かつ正確な情報を得ることが、トラブルを回避し、スムーズな運用を行う上で重要であることを再認識させられました。

半年後に、マネジメントコンソールもAWSCLIも便利になり、優しい世界になっていることを願います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.